import multiprocessing
import os
import time

"""
多进程的设计:
    进程控制

    terminate(self):关闭进程
    is_alive(self):是否存活
    join(self,timeout):加入队列强制执行
    p.is_alive(): 判断子线程p1是否存活
    p.terminate(): 强制结束
    p.Process(daemon=true): 守护进程,主线程开启同时他也开启,主线程结束他也结束
    pid = os.fork() # 创建子进程 只支持linux  windows会报错:Has no attribute fork  
    {pid<0创建失败,pid=0子进程获取数据,pid>0父进程获取数据 }
    psutil :进程工具,pip install psutil 

    # join()
    所有的进程通过start()方法启动,而后多个进程进入到阻塞队列,这时候某一个进程是不可能强占cpu的
    如果这个时候有一个进程必须要现在执行,那就要使用join()


"""


import psutil

# 结束指定进程
def ps_kill(ps_name):
    for ps_item in psutil.process_iter():# 获取所有系统进程
        if ps_item.name() == ps_name:
            ps_item.terminate() # kill process
            print('{}进程已经kill'.format(ps_name))


def ps_cpu():
    print('物理cpu数:[{}]'.format(psutil.cpu_count(logical=False)))
    print('逻辑cpu数:[{}]'.format(psutil.cpu_count(logical=True)))
    print('用户使用cpu时间:[{}],系统使用cpu时间:[{}],空闲时间[{}]'.format(psutil.cpu_times().user,
                                                      psutil.cpu_times().system,
                                                      psutil.cpu_times().idle,
                                             ))
    for i in range(5):
        print('cpu使用率{}'.format(psutil.cpu_percent(interval=1,percpu=True)))# interval=1间隔1秒

# 磁盘信息
def ps_disk():
    print('[磁盘分区情况]:{}'.format(psutil.disk_partitions()))
    print('[磁盘io情况]:{}'.format(psutil.disk_io_counters()))
    print('[d盘使用情况]:{}'.format(psutil.disk_usage('d:')))


# 网络信息
def ps_net():
    print('[数据统计]:{}'.format(psutil.net_io_counters()))
    print('[接口统计]:{}'.format(psutil.net_if_addrs()))
    print('[接口状态]:{}'.format(psutil.net_if_stats()))

if __name__ == '__main__':
    #ps_kill('notepad.exe')
    # ps_cpu()
    # ps_disk()
    ps_net()